home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-17 / dosdev.zip / TXSTK.C < prev    next >
Text File  |  1993-01-04  |  2KB  |  82 lines

  1. /* Listing 4 - Test of STKDEV using standard I/O calls */
  2.  
  3. #include "stdio.h"
  4.  
  5. main()    /* txstk.c - test XSTK device */
  6. {struct {int scs,sss,sds,ses; } sregs;
  7.  struct {int ax,bx,cx,dx,si,di,ds,es; } callregs, retregs;
  8.  int n, handle, flags;
  9.  int setrecsize, chkrecsize;
  10.  char *dev = "XSTK";
  11.  char *outstr = "Hello";
  12.  char *instr;
  13.  
  14.  segread(&sregs);   /* sregs.sds = current ds */
  15.  callregs.ds = sregs.sds;
  16.  
  17.  /* open XSTK in rw mode */
  18.  callregs.ax = 0x3D02;
  19.  callregs.dx = dev;
  20.  flags = sysint21(&callregs,&retregs);
  21.  if(flags & 1) printf("Open error %d\n",retregs.ax);
  22.    else  handle = retregs.ax;
  23.  
  24.  /* write outstr to XSTK one byte at a time */
  25.  callregs.ax = 0x4000;
  26.  callregs.cx = 5;
  27.  callregs.bx = handle;
  28.  callregs.dx = &outstr[0];
  29.  flags = sysint21(&callregs,&retregs);
  30.  if(flags & 1)  printf("Write error %d on char %d\n",retregs.ax,n);
  31.  
  32.  
  33.  /* read outstr from XSTK one byte at a time */
  34.  callregs.ax = 0x3F00;
  35.  callregs.cx = 5;
  36.  callregs.bx = handle;
  37.  callregs.dx = &instr[0];
  38.  flags = sysint21(&callregs,&retregs);
  39.  if(flags & 1)  printf("Read error %d on char %d\n",retregs.ax,n);
  40.     else puts(instr);
  41.  
  42.  
  43.  /* change XSTK record size to 5 bytes with IOCTL calls */
  44.  
  45.  setrecsize = 5;
  46.  callregs.ax = 0x4403;      /* set rec size */
  47.  callregs.cx = 2;
  48.  callregs.bx = handle;
  49.  callregs.dx = &setrecsize;
  50.  flags = sysint21(&callregs,&retregs);
  51.  
  52.  
  53.  callregs.ax = 0x4402;      /* read rec size from XSTK */
  54.  callregs.cx = 2;
  55.  callregs.bx = handle;
  56.  callregs.dx = &chkrecsize;
  57.  flags = sysint21(&callregs,&retregs);
  58.  printf("XSTK record size reset to %d bytes\n",chkrecsize);
  59.  
  60.  
  61.  /* write outstr to XSTK as a 5-byte record */
  62.  callregs.ax = 0x4000;
  63.  callregs.cx = 5;
  64.  callregs.bx = handle;
  65.  callregs.dx = &outstr[0];
  66.  flags = sysint21(&callregs,&retregs);
  67.  if(flags & 1)  printf("Write error %d on char %d\n",retregs.ax,n);
  68.  
  69.  
  70.  /* read outstr from XSTK as a record */
  71.  callregs.ax = 0x3F00;
  72.  callregs.cx = 5;
  73.  callregs.bx = handle;
  74.  callregs.dx = &instr[0];
  75.  flags = sysint21(&callregs,&retregs);
  76.  if(flags & 1)  printf("Read error %d on char %d\n",retregs.ax,n);
  77.    else puts(instr);
  78.  
  79.  
  80.  
  81. } /* end txstk */
  82.